package models

import (
	"github.com/astaxie/beego/logs"
	"github.com/astaxie/beego/orm"
	"time"
)

// UserProfile 用户详细信息表
type UserProfile struct {
	Id         int64     `orm:"pk;auto;column(id);description(主键ID)"`
	Name       string    `orm:"size(16);column(name);default();description(姓名)"`
	Phone      string    `orm:"size(11);column(user_phone);default();description(用户手机号)"`
	Age        uint8     `orm:"size(3);column(age);default(0);description(用户年龄)"`
	Sex        int       `orm:"size(1);column(sex);default(0);description(用户性别 0.未知 1.男 2.女)"`
	User       *SysUser  `orm:"reverse(one);description(对应sys_user表ID)" json:",omitempty"` // 设置反向关系（可选） json:",omitempty"标注的字段作为返回值的时候如果为空则不返回该字段
	CreateTime time.Time `orm:"auto_now_add;type(datetime);column(create_time);description(创建时间)"`
	UpdateTime time.Time `orm:"null;type(datetime);column(update_time);description(更新时间)"`
}

// 定义所需的列名
func getUserProfileNeededColumns() []string {
	return []string{"Id", "Name", "Phone", "Age", "Sex", "CreateTime", "UpdateTime"}
}

// TableName 设置表名
func (u *UserProfile) TableName() string {
	return "user_profile"
}

// TableIndex 多字段索引
func (u *UserProfile) TableIndex() [][]string {
	return [][]string{
		{"Name"},
	}
}

// TableUnique 多字段唯一键
func (u *UserProfile) TableUnique() [][]string {
	return [][]string{
		{"Phone"},
	}
}

// TableEngine 设置引擎为 INNODB
func (u *UserProfile) TableEngine() string {
	return "INNODB"
}

// 让其自身具备增删改查的功能

// GetUserProfileById 根据主键查询用户信息
func GetUserProfileById(id int64) (*UserProfile, error) {
	o := orm.NewOrm()
	user := new(UserProfile)
	//_, err := o.QueryTable("sys_user").Filter("Id", id).All(user)
	err := o.QueryTable("user_profile").Filter("Id", id).One(user, getUserProfileNeededColumns()...)
	//err:=o.Raw("select * from user where Id = ?",id).QueryRow(user)//使用sql语句进行查询
	if err != nil {
		logs.Error(err)
		return nil, err
	}
	return user, nil
}

// GetUserProfileList 查询所有用户
func GetUserProfileList() (*[]UserProfile, error) {
	o := orm.NewOrm()
	user := new([]UserProfile)
	_, err := o.QueryTable("user_profile").All(user, getUserProfileNeededColumns()...)
	//err:=o.Raw("select * from user where Id = ?",id).QueryRow(user)//使用sql语句进行查询
	if err != nil {
		logs.Error(err)
		return nil, err
	}
	return user, nil
}

func init() {
	// 需要在 init 中注册定义的 model
	orm.RegisterModel(new(UserProfile))
}
